/**
 * 日志配置
 * 统一管理所有日志相关的配置项
 */

const LOG_DIR = './logs';
const ERROR_LOG_DIR = './logs/error';
const OUTPUT_LOG_DIR = './logs/output';

// 日志级别配置
const LOG_LEVELS = {
  DEBUG: 'debug',
  INFO: 'info',
  WARN: 'warn',
  ERROR: 'error'
};

// 日志级别映射
const LOG_LEVELS_MAPPING = {
  error: 'ERROR',
  warn: 'WARN', 
  info: 'INFO',
  debug: 'DEBUG',
  trace: 'TRACE'
};

// 模块级别日志配置（使用小写作为键名）
const MODULE_LOG_LEVELS = {
  'default': 'info',
  'database': 'warn',
  'api': 'info',
  'auth': 'debug',
  'cache': 'warn'
};

// 默认日志级别
const DEFAULT_LOG_LEVEL = 'info';

// 日志文件配置
const MAX_LOG_SIZE = 10 * 1024 * 1024; // 10MB
const LOG_BACKUPS = 5; // 保留5个备份文件

// 日志条目配置
const MAX_LOG_ENTRY_SIZE = 1024 * 50; // 50KB

// 性能监控配置
const SLOW_REQUEST_THRESHOLD = 1000; // 1秒

// 敏感信息脱敏配置
const SENSITIZATION_CONFIG = {
  // 密码脱敏配置
  password: {
    pattern: /"password":"([^"]*)"/g,
    replace: '"password":"******"'
  },
  // 令牌脱敏配置
  token: {
    pattern: /"token":"([^"]*)"/g,
    replace: '"token":"******"'
  },
  // 邮箱脱敏配置
  email: {
    pattern: /"email":"([^@]+)(@.*?)"/g,
    replace: (match, p1, p2) => {
      // 保留邮箱前缀的前两位字符，其余用*替换
      const visibleChars = 2;
      const maskedPrefix = p1.length <= visibleChars 
        ? p1.charAt(0) + '*'.repeat(p1.length - 1)
        : p1.substring(0, visibleChars) + '*'.repeat(p1.length - visibleChars);
      return `"email":"${maskedPrefix}${p2}"`;
    }
  },
  // 手机号脱敏配置
  phone: {
    pattern: /"phone":"(\d{3})(\d{4})(\d{4})"/g,
    replace: '"phone":"$1****$3"'
  },
  // ID卡脱敏配置
  idCard: {
    pattern: /"idCard":"(\d{6})(\d*)(\d{4})"/g,
    replace: '"idCard":"$1********$3"'
  },
  // 银行卡脱敏配置
  bankCard: {
    pattern: /"bankCard":"(\d{4})(\d*)(\d{4})"/g,
    replace: '"bankCard":"$1********$3"'
  }
};

module.exports = {
  // 目录配置
  LOG_DIR,
  ERROR_LOG_DIR,
  OUTPUT_LOG_DIR,
  
  // 日志级别
  LOG_LEVELS,
  LOG_LEVELS_MAPPING,
  MODULE_LOG_LEVELS,
  DEFAULT_LOG_LEVEL,
  
  // 文件配置
  MAX_LOG_SIZE,
  LOG_BACKUPS,
  
  // 条目配置
  MAX_LOG_ENTRY_SIZE,
  
  // 性能监控
  SLOW_REQUEST_THRESHOLD,
  
  // 脱敏配置
  SENSITIZATION_CONFIG
};